#ifndef HISTOGRAMA_H
#define HISTOGRAMA_H

#include <opencv/cv.h>


class histograma  // clase abstracta
{
	
        protected:

                CvHistogram *hist;  //apuntador al histograma
                int nBarras, nValores,umbralOptimo;  // numero de barras que tendra el histograma y numero de valores que contiene
                float media,varianza;


        public:

                //metodos virtuales que deben ser definidas posteriormente cuando se implementen las clases concretas
                
                virtual void calcularHist(IplImage *img)=0;
                virtual IplImage * dibujarHist()=0;
                IplImage * dibujarGrupo(histograma * hist2, histograma * hist3);
                float obtenerMedia();
                float obtenerMediana();
                int obtenerModa();
                float obtenerDesvEstandar();
                int obtenerRango();
                float calcularSesgo(float estimador);
                float obtenerVarianza();
                int obtenerUmbralOptimo();
                int obtenerUmbralOptimo(IplImage *i);
                CvHistogram  * pasarApuntador();
                


};

class histogramaTinte : public histograma 
//Clase HistogramaHSV creada para trabajar histogramas de imagenes HSV,
// hereda de la clase abstracta Histograma
{
        public:

                //definicion de los metodos
                histogramaTinte();
                void calcularHist(IplImage *img);
                IplImage * dibujarHist();
};

class histogramaRGB : public histograma 
//Clase HistogramaRGB creada para trabajar histogramas de imagenes RGB,
// hereda de la clase abstracta Histograma
{
        public:

                //definicion de los metodos
                histogramaRGB();
                void calcularHist(IplImage *img);
                IplImage * dibujarHist();
};
#endif // HISTOGRAMA_H
